/**
 * 解析日志行，将日志行分割成多个元素，并以数组形式返回。
 *
 * @param logLine 日志行字符串
 * @returns 返回一个包含日志行中所有元素的数组
 */
function parseLogLine(logLine) {
  const result = [];
  let currentIndex = 0;
  let buffer = "";
  let inQuotes = false;
  // 循环遍历日志行中的每个字符
  while (currentIndex < logLine.length) {
    const char = logLine[currentIndex];
    if (char === "_") {
      // 如果遇到下划线且不在引号内，将buffer内容推入result并重置buffer。
      if (!inQuotes) {
        if (buffer) {
          // 检查buffer是否为空
          result.push(buffer);
          buffer = ""; // 重置buffer
        }
      } else {
        buffer += char; // 如果在引号内，则把下划线也加入buffer
      }
      // 如果遇到引号，切换inQuotes状态，
      // 并根据状态决定是否将buffer内容推入result并重置buffer。
    } else if (char === '"') {
      inQuotes = !inQuotes;
      if (!inQuotes && buffer) {
        // 检查buffer是否为空
        result.push(buffer);
        buffer = ""; // 重置buffer
      }
    } else {
      buffer += char; // 其他字符直接加入buffer
    }
    currentIndex++;
  }

  if (buffer) {
    // 处理日志行末尾的内容
    result.push(buffer);
  }

  return result;
}

// 测试示例数据
const logLine = 'ab_c_"abc_abc"_abc_"dddd"';
const parsed = parseLogLine(logLine);
console.log(parsed); // 输出: ["ab", "c", "abc_abc", "abc", "dddd"]
